<?php
    /*********************************************************************************
     * Zurmo is a customer relationship management program developed by
     * Zurmo, Inc. Copyright (C) 2014 Zurmo Inc.
     *
     * Zurmo is free software; you can redistribute it and/or modify it under
     * the terms of the GNU Affero General Public License version 3 as published by the
     * Free Software Foundation with the addition of the following permission added
     * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
     * IN WHICH THE COPYRIGHT IS OWNED BY ZURMO, ZURMO DISCLAIMS THE WARRANTY
     * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
     *
     * Zurmo is distributed in the hope that it will be useful, but WITHOUT
     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
     * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
     * details.
     *
     * You should have received a copy of the GNU Affero General Public License along with
     * this program; if not, see http://www.gnu.org/licenses or write to the Free
     * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
     * 02110-1301 USA.
     *
     * You can contact Zurmo, Inc. with a mailing address at 27 North Wacker Drive
     * Suite 370 Chicago, IL 60606. or at email address contact@zurmo.com.
     *
     * The interactive user interfaces in original and modified versions
     * of this program must display Appropriate Legal Notices, as required under
     * Section 5 of the GNU Affero General Public License version 3.
     *
     * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
     * these Appropriate Legal Notices must retain the display of the Zurmo
     * logo and Zurmo copyright notice. If the display of the logo is not reasonably
     * feasible for technical reasons, the Appropriate Legal Notices must display the words
     * "Copyright Zurmo Inc. 2014. All rights reserved".
     ********************************************************************************/

    class SelectContactOrReportElement extends Element
    {
        const SELECT_CONTACT_SEARCH_BOX_ID          = 'select-contact-or-lead-search-box';

        const SELECT_REPORT_SEARCH_BOX_ID           = 'select-report-search-box';

        const SELECT_CONTACT_OR_REPORT_RADIO_ID     = 'select-contact-or-report-radio';

        const SEARCH_BOX_MAGNIFIER_CLASS            = 'search-without-scope';

        public function getActionType()
        {
            return 'Details';
        }

        protected function getDefaultLabel()
        {
            return Zurmo::t('Core', 'Select');
        }

        protected function getDefaultRoute()
        {
            return null;
        }

        public function renderControlNonEditable()
        {
            throw new NotSupportedException();
        }

        public function renderControlEditable()
        {
            $selectRadioParams              = CMap::mergeArray($this->params,
                                                        array('selectContactSearchBoxId' => static::SELECT_CONTACT_SEARCH_BOX_ID,
                                                            'selectReportSearchBoxId' => static::SELECT_REPORT_SEARCH_BOX_ID));
            $selectContactOrReportParams    = CMap::mergeArray($this->params,
                                                        array('radioButtonClass' => 'selectContactOrReportRadioButton'));
            $content                        = $this->renderSelectContactOrReportRadioButton($selectRadioParams);;
            $content                        .= $this->renderSelectContactOrLeadSearchBox($selectContactOrReportParams);
            $content                        .= $this->renderSelectReportSearchBox($selectContactOrReportParams);
            return $content;
        }

        protected function renderSelectContactOrLeadSearchBox($params)
        {
            return $this->renderSearchBox($params, true);
        }

        protected function renderSelectReportSearchBox($params)
        {
            return $this->renderSearchBox($params, false);
        }

        protected function renderSearchBox($params, $selectContact = true)
        {
            $attribute          = 'selectContactOrLeadSearchBox';
            $searchBoxDivId     = static::SELECT_CONTACT_SEARCH_BOX_ID;
            $elementClassName   = 'MarketingListMemberSelectContactOrLeadAutoCompleteElement';
            if (!$selectContact)
            {
                $attribute          = 'selectReportSearchBox';
                $searchBoxDivId     = static::SELECT_REPORT_SEARCH_BOX_ID;
                $elementClassName   = 'MarketingListMemberSelectReportAutoCompleteElement';
            }
            $element            = new $elementClassName($this->model, $attribute, $this->form, $params);
            $content            = ZurmoHtml::tag('div', array('id' => $searchBoxDivId,
                                                                'class' => static::SEARCH_BOX_MAGNIFIER_CLASS),
                                                        $element->render() . $this->renderAutoCompleteSpinner());
            return $content;
        }

        protected function renderSelectContactOrReportRadioButton($params)
        {
            $selectRadio = new MarketingListMemberSelectRadioElement($this->model,
                                                                        'selectContactOrReportRadioButton',
                                                                        $this->form,
                                                                        $params);
            return ZurmoHtml::tag('div', array('id' => static::SELECT_CONTACT_OR_REPORT_RADIO_ID),
                                                                        $selectRadio->render());
        }

        protected function renderAutoCompleteSpinner()
        {
            return '<span class="z-spinner"></span>';
        }
    }
?>
